﻿using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Collections.Generic;


namespace SlvPartecipazione
{
    public class Partita
    {
        public Partita()
        {
        }
        
        public Brano getBranoDaEseguire(List<Brano> lst, int currentIndex)
        {
            for (int i = currentIndex+1; i < lst.Capacity; i++)
            {
                Brano br = lst[i];
                // se un brano ha lo stato 'sbagliato', viene restituito come brano ancora 'daEseguire'
                if (br.stato.Equals(MainPage.Stato.daEseguire) || br.stato.Equals(MainPage.Stato.sbagliato))
                {
                    return br;
                }
            }
            for (int i = 0; i <= currentIndex; i++)
            {
                Brano br = lst[i];
                // se un brano ha lo stato 'sbagliato', viene restituito come brano ancora 'daEseguire'
                if (br.stato.Equals(MainPage.Stato.daEseguire) || br.stato.Equals(MainPage.Stato.sbagliato))
                {
                    return br;
                }
            }
            
            return null;
        }

        public bool resetBraniDaEseguire(List<Brano> lst)
        {
            bool trovato = false;
            foreach (Brano br in lst)
            {
                // se un brano ha lo stato 'eseguito' OPPURE 'sbagliato', viene resettato
                if (br.stato.Equals(MainPage.Stato.eseguito) || br.stato.Equals(MainPage.Stato.sbagliato))
                {
                    br.stato = MainPage.Stato.daEseguire;
                    trovato = true;
                }
            }
            return trovato;
        }

        public void resetTuttiBraniDaEseguire(List<Brano> lst)
        {
            foreach (Brano br in lst)
            {
                //se il brano è stato precedentemente indovinato, NON viene resettato.
                if (!br.stato.Equals(MainPage.Stato.corretto))
                    br.stato = MainPage.Stato.daEseguire;
            }
        }
        
        public void interrompiBrani(List<Brano> lst)
        {
            foreach (Brano br in lst)
            {
                br.mediaSound.Stop();
            }
        }

        public enum esitoPartita
        {
            incompleta, vinta, persa
        }

        public esitoPartita isPartitaVinta(List<Brano> lst)
        {
            // se ci sono ancora brani da eseguire, esce dal metodo
            foreach (Brano br in lst)
            {
                if (br.stato.Equals(MainPage.Stato.daEseguire) || br.stato.Equals(MainPage.Stato.eseguito))
                {
                    return esitoPartita.incompleta;
                }

            }

            // se sono stayi eseguiti tutti i brani, verifico il risultato della partita
            foreach (Brano br in lst)
            {
                if (!br.stato.Equals(MainPage.Stato.corretto))
                {
                    return esitoPartita.persa;
                }

            }
            return esitoPartita.vinta;
        }

    }
}
